/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import controller.exceptions.IllegalOrphanException;
import controller.exceptions.NonexistentEntityException;
import controller.exceptions.PreexistingEntityException;
import dto.*;
import java.io.Serializable;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author chokurey
 */
public class EmpresaJpaController implements Serializable {

    public EmpresaJpaController() {
        this.emf = Persistence.createEntityManagerFactory("portal_webPU");
    }
    
    public EmpresaJpaController(EntityManagerFactory emf) {
        this.emf = emf;
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(Empresa empresa) throws PreexistingEntityException, Exception {
        if (empresa.getServiciosList() == null) {
            empresa.setServiciosList(new ArrayList<Servicios>());
        }
        if (empresa.getEventosList() == null) {
            empresa.setEventosList(new ArrayList<Eventos>());
        }
        if (empresa.getProductosList() == null) {
            empresa.setProductosList(new ArrayList<Productos>());
        }
        if (empresa.getPromocionesList() == null) {
            empresa.setPromocionesList(new ArrayList<Promociones>());
        }
        if (empresa.getFotosList() == null) {
            empresa.setFotosList(new ArrayList<Fotos>());
        }
        if (empresa.getClasificadosList() == null) {
            empresa.setClasificadosList(new ArrayList<Clasificados>());
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            List<Servicios> attachedServiciosList = new ArrayList<Servicios>();
            for (Servicios serviciosListServiciosToAttach : empresa.getServiciosList()) {
                serviciosListServiciosToAttach = em.getReference(serviciosListServiciosToAttach.getClass(), serviciosListServiciosToAttach.getIdServicios());
                attachedServiciosList.add(serviciosListServiciosToAttach);
            }
            empresa.setServiciosList(attachedServiciosList);
            List<Eventos> attachedEventosList = new ArrayList<Eventos>();
            for (Eventos eventosListEventosToAttach : empresa.getEventosList()) {
                eventosListEventosToAttach = em.getReference(eventosListEventosToAttach.getClass(), eventosListEventosToAttach.getIdEventos());
                attachedEventosList.add(eventosListEventosToAttach);
            }
            empresa.setEventosList(attachedEventosList);
            List<Productos> attachedProductosList = new ArrayList<Productos>();
            for (Productos productosListProductosToAttach : empresa.getProductosList()) {
                productosListProductosToAttach = em.getReference(productosListProductosToAttach.getClass(), productosListProductosToAttach.getIdProductos());
                attachedProductosList.add(productosListProductosToAttach);
            }
            empresa.setProductosList(attachedProductosList);
            List<Promociones> attachedPromocionesList = new ArrayList<Promociones>();
            for (Promociones promocionesListPromocionesToAttach : empresa.getPromocionesList()) {
                promocionesListPromocionesToAttach = em.getReference(promocionesListPromocionesToAttach.getClass(), promocionesListPromocionesToAttach.getIdPromociones());
                attachedPromocionesList.add(promocionesListPromocionesToAttach);
            }
            empresa.setPromocionesList(attachedPromocionesList);
            List<Fotos> attachedFotosList = new ArrayList<Fotos>();
            for (Fotos fotosListFotosToAttach : empresa.getFotosList()) {
                fotosListFotosToAttach = em.getReference(fotosListFotosToAttach.getClass(), fotosListFotosToAttach.getIdfotos());
                attachedFotosList.add(fotosListFotosToAttach);
            }
            empresa.setFotosList(attachedFotosList);
            List<Clasificados> attachedClasificadosList = new ArrayList<Clasificados>();
            for (Clasificados clasificadosListClasificadosToAttach : empresa.getClasificadosList()) {
                clasificadosListClasificadosToAttach = em.getReference(clasificadosListClasificadosToAttach.getClass(), clasificadosListClasificadosToAttach.getIdClasificados());
                attachedClasificadosList.add(clasificadosListClasificadosToAttach);
            }
            empresa.setClasificadosList(attachedClasificadosList);
            em.persist(empresa);
            for (Servicios serviciosListServicios : empresa.getServiciosList()) {
                Empresa oldEmpresanitOfServiciosListServicios = serviciosListServicios.getEmpresanit();
                serviciosListServicios.setEmpresanit(empresa);
                serviciosListServicios = em.merge(serviciosListServicios);
                if (oldEmpresanitOfServiciosListServicios != null) {
                    oldEmpresanitOfServiciosListServicios.getServiciosList().remove(serviciosListServicios);
                    oldEmpresanitOfServiciosListServicios = em.merge(oldEmpresanitOfServiciosListServicios);
                }
            }
            for (Eventos eventosListEventos : empresa.getEventosList()) {
                Empresa oldEmpresanitOfEventosListEventos = eventosListEventos.getEmpresanit();
                eventosListEventos.setEmpresanit(empresa);
                eventosListEventos = em.merge(eventosListEventos);
                if (oldEmpresanitOfEventosListEventos != null) {
                    oldEmpresanitOfEventosListEventos.getEventosList().remove(eventosListEventos);
                    oldEmpresanitOfEventosListEventos = em.merge(oldEmpresanitOfEventosListEventos);
                }
            }
            for (Productos productosListProductos : empresa.getProductosList()) {
                Empresa oldEmpresanitOfProductosListProductos = productosListProductos.getEmpresanit();
                productosListProductos.setEmpresanit(empresa);
                productosListProductos = em.merge(productosListProductos);
                if (oldEmpresanitOfProductosListProductos != null) {
                    oldEmpresanitOfProductosListProductos.getProductosList().remove(productosListProductos);
                    oldEmpresanitOfProductosListProductos = em.merge(oldEmpresanitOfProductosListProductos);
                }
            }
            for (Promociones promocionesListPromociones : empresa.getPromocionesList()) {
                Empresa oldEmpresanitOfPromocionesListPromociones = promocionesListPromociones.getEmpresanit();
                promocionesListPromociones.setEmpresanit(empresa);
                promocionesListPromociones = em.merge(promocionesListPromociones);
                if (oldEmpresanitOfPromocionesListPromociones != null) {
                    oldEmpresanitOfPromocionesListPromociones.getPromocionesList().remove(promocionesListPromociones);
                    oldEmpresanitOfPromocionesListPromociones = em.merge(oldEmpresanitOfPromocionesListPromociones);
                }
            }
            for (Fotos fotosListFotos : empresa.getFotosList()) {
                Empresa oldEmpresanitOfFotosListFotos = fotosListFotos.getEmpresanit();
                fotosListFotos.setEmpresanit(empresa);
                fotosListFotos = em.merge(fotosListFotos);
                if (oldEmpresanitOfFotosListFotos != null) {
                    oldEmpresanitOfFotosListFotos.getFotosList().remove(fotosListFotos);
                    oldEmpresanitOfFotosListFotos = em.merge(oldEmpresanitOfFotosListFotos);
                }
            }
            for (Clasificados clasificadosListClasificados : empresa.getClasificadosList()) {
                Empresa oldEmpresanitOfClasificadosListClasificados = clasificadosListClasificados.getEmpresanit();
                clasificadosListClasificados.setEmpresanit(empresa);
                clasificadosListClasificados = em.merge(clasificadosListClasificados);
                if (oldEmpresanitOfClasificadosListClasificados != null) {
                    oldEmpresanitOfClasificadosListClasificados.getClasificadosList().remove(clasificadosListClasificados);
                    oldEmpresanitOfClasificadosListClasificados = em.merge(oldEmpresanitOfClasificadosListClasificados);
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (findEmpresa(empresa.getNit()) != null) {
                throw new PreexistingEntityException("Empresa " + empresa + " already exists.", ex);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Empresa empresa) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Empresa persistentEmpresa = em.find(Empresa.class, empresa.getNit());
            List<Servicios> serviciosListOld = persistentEmpresa.getServiciosList();
            List<Servicios> serviciosListNew = empresa.getServiciosList();
            List<Eventos> eventosListOld = persistentEmpresa.getEventosList();
            List<Eventos> eventosListNew = empresa.getEventosList();
            List<Productos> productosListOld = persistentEmpresa.getProductosList();
            List<Productos> productosListNew = empresa.getProductosList();
            List<Promociones> promocionesListOld = persistentEmpresa.getPromocionesList();
            List<Promociones> promocionesListNew = empresa.getPromocionesList();
            List<Fotos> fotosListOld = persistentEmpresa.getFotosList();
            List<Fotos> fotosListNew = empresa.getFotosList();
            List<Clasificados> clasificadosListOld = persistentEmpresa.getClasificadosList();
            List<Clasificados> clasificadosListNew = empresa.getClasificadosList();
            List<String> illegalOrphanMessages = null;
            for (Servicios serviciosListOldServicios : serviciosListOld) {
                if (!serviciosListNew.contains(serviciosListOldServicios)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Servicios " + serviciosListOldServicios + " since its empresanit field is not nullable.");
                }
            }
            for (Eventos eventosListOldEventos : eventosListOld) {
                if (!eventosListNew.contains(eventosListOldEventos)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Eventos " + eventosListOldEventos + " since its empresanit field is not nullable.");
                }
            }
            for (Productos productosListOldProductos : productosListOld) {
                if (!productosListNew.contains(productosListOldProductos)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Productos " + productosListOldProductos + " since its empresanit field is not nullable.");
                }
            }
            for (Promociones promocionesListOldPromociones : promocionesListOld) {
                if (!promocionesListNew.contains(promocionesListOldPromociones)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Promociones " + promocionesListOldPromociones + " since its empresanit field is not nullable.");
                }
            }
            for (Fotos fotosListOldFotos : fotosListOld) {
                if (!fotosListNew.contains(fotosListOldFotos)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Fotos " + fotosListOldFotos + " since its empresanit field is not nullable.");
                }
            }
            for (Clasificados clasificadosListOldClasificados : clasificadosListOld) {
                if (!clasificadosListNew.contains(clasificadosListOldClasificados)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Clasificados " + clasificadosListOldClasificados + " since its empresanit field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            List<Servicios> attachedServiciosListNew = new ArrayList<Servicios>();
            for (Servicios serviciosListNewServiciosToAttach : serviciosListNew) {
                serviciosListNewServiciosToAttach = em.getReference(serviciosListNewServiciosToAttach.getClass(), serviciosListNewServiciosToAttach.getIdServicios());
                attachedServiciosListNew.add(serviciosListNewServiciosToAttach);
            }
            serviciosListNew = attachedServiciosListNew;
            empresa.setServiciosList(serviciosListNew);
            List<Eventos> attachedEventosListNew = new ArrayList<Eventos>();
            for (Eventos eventosListNewEventosToAttach : eventosListNew) {
                eventosListNewEventosToAttach = em.getReference(eventosListNewEventosToAttach.getClass(), eventosListNewEventosToAttach.getIdEventos());
                attachedEventosListNew.add(eventosListNewEventosToAttach);
            }
            eventosListNew = attachedEventosListNew;
            empresa.setEventosList(eventosListNew);
            List<Productos> attachedProductosListNew = new ArrayList<Productos>();
            for (Productos productosListNewProductosToAttach : productosListNew) {
                productosListNewProductosToAttach = em.getReference(productosListNewProductosToAttach.getClass(), productosListNewProductosToAttach.getIdProductos());
                attachedProductosListNew.add(productosListNewProductosToAttach);
            }
            productosListNew = attachedProductosListNew;
            empresa.setProductosList(productosListNew);
            List<Promociones> attachedPromocionesListNew = new ArrayList<Promociones>();
            for (Promociones promocionesListNewPromocionesToAttach : promocionesListNew) {
                promocionesListNewPromocionesToAttach = em.getReference(promocionesListNewPromocionesToAttach.getClass(), promocionesListNewPromocionesToAttach.getIdPromociones());
                attachedPromocionesListNew.add(promocionesListNewPromocionesToAttach);
            }
            promocionesListNew = attachedPromocionesListNew;
            empresa.setPromocionesList(promocionesListNew);
            List<Fotos> attachedFotosListNew = new ArrayList<Fotos>();
            for (Fotos fotosListNewFotosToAttach : fotosListNew) {
                fotosListNewFotosToAttach = em.getReference(fotosListNewFotosToAttach.getClass(), fotosListNewFotosToAttach.getIdfotos());
                attachedFotosListNew.add(fotosListNewFotosToAttach);
            }
            fotosListNew = attachedFotosListNew;
            empresa.setFotosList(fotosListNew);
            List<Clasificados> attachedClasificadosListNew = new ArrayList<Clasificados>();
            for (Clasificados clasificadosListNewClasificadosToAttach : clasificadosListNew) {
                clasificadosListNewClasificadosToAttach = em.getReference(clasificadosListNewClasificadosToAttach.getClass(), clasificadosListNewClasificadosToAttach.getIdClasificados());
                attachedClasificadosListNew.add(clasificadosListNewClasificadosToAttach);
            }
            clasificadosListNew = attachedClasificadosListNew;
            empresa.setClasificadosList(clasificadosListNew);
            empresa = em.merge(empresa);
            for (Servicios serviciosListNewServicios : serviciosListNew) {
                if (!serviciosListOld.contains(serviciosListNewServicios)) {
                    Empresa oldEmpresanitOfServiciosListNewServicios = serviciosListNewServicios.getEmpresanit();
                    serviciosListNewServicios.setEmpresanit(empresa);
                    serviciosListNewServicios = em.merge(serviciosListNewServicios);
                    if (oldEmpresanitOfServiciosListNewServicios != null && !oldEmpresanitOfServiciosListNewServicios.equals(empresa)) {
                        oldEmpresanitOfServiciosListNewServicios.getServiciosList().remove(serviciosListNewServicios);
                        oldEmpresanitOfServiciosListNewServicios = em.merge(oldEmpresanitOfServiciosListNewServicios);
                    }
                }
            }
            for (Eventos eventosListNewEventos : eventosListNew) {
                if (!eventosListOld.contains(eventosListNewEventos)) {
                    Empresa oldEmpresanitOfEventosListNewEventos = eventosListNewEventos.getEmpresanit();
                    eventosListNewEventos.setEmpresanit(empresa);
                    eventosListNewEventos = em.merge(eventosListNewEventos);
                    if (oldEmpresanitOfEventosListNewEventos != null && !oldEmpresanitOfEventosListNewEventos.equals(empresa)) {
                        oldEmpresanitOfEventosListNewEventos.getEventosList().remove(eventosListNewEventos);
                        oldEmpresanitOfEventosListNewEventos = em.merge(oldEmpresanitOfEventosListNewEventos);
                    }
                }
            }
            for (Productos productosListNewProductos : productosListNew) {
                if (!productosListOld.contains(productosListNewProductos)) {
                    Empresa oldEmpresanitOfProductosListNewProductos = productosListNewProductos.getEmpresanit();
                    productosListNewProductos.setEmpresanit(empresa);
                    productosListNewProductos = em.merge(productosListNewProductos);
                    if (oldEmpresanitOfProductosListNewProductos != null && !oldEmpresanitOfProductosListNewProductos.equals(empresa)) {
                        oldEmpresanitOfProductosListNewProductos.getProductosList().remove(productosListNewProductos);
                        oldEmpresanitOfProductosListNewProductos = em.merge(oldEmpresanitOfProductosListNewProductos);
                    }
                }
            }
            for (Promociones promocionesListNewPromociones : promocionesListNew) {
                if (!promocionesListOld.contains(promocionesListNewPromociones)) {
                    Empresa oldEmpresanitOfPromocionesListNewPromociones = promocionesListNewPromociones.getEmpresanit();
                    promocionesListNewPromociones.setEmpresanit(empresa);
                    promocionesListNewPromociones = em.merge(promocionesListNewPromociones);
                    if (oldEmpresanitOfPromocionesListNewPromociones != null && !oldEmpresanitOfPromocionesListNewPromociones.equals(empresa)) {
                        oldEmpresanitOfPromocionesListNewPromociones.getPromocionesList().remove(promocionesListNewPromociones);
                        oldEmpresanitOfPromocionesListNewPromociones = em.merge(oldEmpresanitOfPromocionesListNewPromociones);
                    }
                }
            }
            for (Fotos fotosListNewFotos : fotosListNew) {
                if (!fotosListOld.contains(fotosListNewFotos)) {
                    Empresa oldEmpresanitOfFotosListNewFotos = fotosListNewFotos.getEmpresanit();
                    fotosListNewFotos.setEmpresanit(empresa);
                    fotosListNewFotos = em.merge(fotosListNewFotos);
                    if (oldEmpresanitOfFotosListNewFotos != null && !oldEmpresanitOfFotosListNewFotos.equals(empresa)) {
                        oldEmpresanitOfFotosListNewFotos.getFotosList().remove(fotosListNewFotos);
                        oldEmpresanitOfFotosListNewFotos = em.merge(oldEmpresanitOfFotosListNewFotos);
                    }
                }
            }
            for (Clasificados clasificadosListNewClasificados : clasificadosListNew) {
                if (!clasificadosListOld.contains(clasificadosListNewClasificados)) {
                    Empresa oldEmpresanitOfClasificadosListNewClasificados = clasificadosListNewClasificados.getEmpresanit();
                    clasificadosListNewClasificados.setEmpresanit(empresa);
                    clasificadosListNewClasificados = em.merge(clasificadosListNewClasificados);
                    if (oldEmpresanitOfClasificadosListNewClasificados != null && !oldEmpresanitOfClasificadosListNewClasificados.equals(empresa)) {
                        oldEmpresanitOfClasificadosListNewClasificados.getClasificadosList().remove(clasificadosListNewClasificados);
                        oldEmpresanitOfClasificadosListNewClasificados = em.merge(oldEmpresanitOfClasificadosListNewClasificados);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                String id = empresa.getNit();
                if (findEmpresa(id) == null) {
                    throw new NonexistentEntityException("The empresa with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(String id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Empresa empresa;
            try {
                empresa = em.getReference(Empresa.class, id);
                empresa.getNit();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The empresa with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            List<Servicios> serviciosListOrphanCheck = empresa.getServiciosList();
            for (Servicios serviciosListOrphanCheckServicios : serviciosListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Empresa (" + empresa + ") cannot be destroyed since the Servicios " + serviciosListOrphanCheckServicios + " in its serviciosList field has a non-nullable empresanit field.");
            }
            List<Eventos> eventosListOrphanCheck = empresa.getEventosList();
            for (Eventos eventosListOrphanCheckEventos : eventosListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Empresa (" + empresa + ") cannot be destroyed since the Eventos " + eventosListOrphanCheckEventos + " in its eventosList field has a non-nullable empresanit field.");
            }
            List<Productos> productosListOrphanCheck = empresa.getProductosList();
            for (Productos productosListOrphanCheckProductos : productosListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Empresa (" + empresa + ") cannot be destroyed since the Productos " + productosListOrphanCheckProductos + " in its productosList field has a non-nullable empresanit field.");
            }
            List<Promociones> promocionesListOrphanCheck = empresa.getPromocionesList();
            for (Promociones promocionesListOrphanCheckPromociones : promocionesListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Empresa (" + empresa + ") cannot be destroyed since the Promociones " + promocionesListOrphanCheckPromociones + " in its promocionesList field has a non-nullable empresanit field.");
            }
            List<Fotos> fotosListOrphanCheck = empresa.getFotosList();
            for (Fotos fotosListOrphanCheckFotos : fotosListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Empresa (" + empresa + ") cannot be destroyed since the Fotos " + fotosListOrphanCheckFotos + " in its fotosList field has a non-nullable empresanit field.");
            }
            List<Clasificados> clasificadosListOrphanCheck = empresa.getClasificadosList();
            for (Clasificados clasificadosListOrphanCheckClasificados : clasificadosListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Empresa (" + empresa + ") cannot be destroyed since the Clasificados " + clasificadosListOrphanCheckClasificados + " in its clasificadosList field has a non-nullable empresanit field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            em.remove(empresa);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Empresa> findEmpresaEntities() {
        return findEmpresaEntities(true, -1, -1);
    }

    public List<Empresa> findEmpresaEntities(int maxResults, int firstResult) {
        return findEmpresaEntities(false, maxResults, firstResult);
    }

    private List<Empresa> findEmpresaEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(Empresa.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Empresa findEmpresa(String id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Empresa.class, id);
        } finally {
            em.close();
        }
    }

    public int getEmpresaCount() {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<Empresa> rt = cq.from(Empresa.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
